<?php	
	/**
	 * REGISTER CONTROLLER kontrollerar om användaren försöker registrera sig.
	 */
	class RegisterController {
		
		private $validate = null;


		//----- FUNKTION: CONSTRUCT ----------------------------------------------------------------------------------------
		/**
		* Konstruktor funktion som lägger till en Validate i vår privata variabel $validate.
		* @param Validate $validate Vår validator.
		*/
		public function __construct(Validate $validate)
		{
			$this->validate = $validate;
		}
		

		//----- FUNKTION: DO REGISTER CONTROLL ----------------------------------------------------------------------------------------
		/**
	 	* DoRegisterControll är till för att kontrollera vilket tillstånd användaren befinner sig i.
		* @param LoginHandler $loginHandler Innehåller ett Login Handler objekt.
		* @param RegisterHandler $registerHandler Innehåller ett Register Handler objekt.
		* @param RegisterView $registerView Innehåller ett Register View objekt.
		* @return string $returnstring innehåller den HTML-kod som ska skrivas ut till användaren.		
	 	*/
		public function DoRegisterControll(LoginHandler $loginHandler, RegisterHandler $registerHandler, RegisterView $registerView)
		{
			$returnstring = "";						
			
			// Kontrollerar om användaren är inloggad, annars är användaren utloggad och då kontrollerar vi om användaren har försökt att registrera sig.
			if($loginHandler->UserIsLoggedIn()){
				
				// Kontrollerar om användraen har försökt att ta bort en användare.
				if ($registerView->TriedToDelete()) {
					$deleteID = $registerView->GetDeleteID();
					$registerHandler->DeleteUser($deleteID);
				}
			}else {
				$errorMessageNumber = array();
				$errorMessagesHTML = "";

				// Kontrollerar om användaren försöker registrera sig och hämtar ut datan ifrån registrerings formuläret.
				if ($registerView->TriedToRegister()) {
					$username = $registerView->GetUserName();
                    $mail = $registerView->GetMail();                    
                    $password = $registerView->GetPassword();
                    $repeatPassword = $registerView->GetRepeatPassword();

                    // Kontrollerar om användarnamnet redan är upptaget, annars skickar vi vidare all indata för validering.
                    if ($registerHandler->OccupiedUsername($username)) {
                    	$errorMessageNumber[] = RegisterView::USERNAME_TAKEN;
                    } else {
                    	$errorMessageNumber = $registerHandler->DataValidator($username, $mail, $password, $repeatPassword);
                    	
                    	// Om arrayen vi får tillbaka är tom så betyder det att vi inte har fått några fel (indatan klarade valideringen).
                    	if (empty($errorMessageNumber)) {
                    		$errorMessageNumber[] = RegisterView::EMPTY_MESSAGE;
                    		$newUserID = $registerHandler->RegisterUser($username, $mail, $password);

                    		// Lägger in meddelandet om att registeringen lyckdes i arrayen.
                    		if ($newUserID != false) {
                    			$errorMessageNumber[] = RegisterView::REGISTRATION_IS_SUCCESSFUL;
                    		}
                    	}
                    }

                    // Sorterar våra nummer(som representerar olika felmeddelanden). 
                    sort($errorMessageNumber);
                    // Hämtar ut våra meddelanden i text format.
                    $errorMessagesHTML = $registerView->MessageHolder($errorMessageNumber);
				}
				$returnstring = $registerView -> CreateRegisterForm($errorMessagesHTML);

			}						
			return $returnstring;
		}
	}	
?>